﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls.Primitives;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Markup;
using System.Security.Principal;
using System.Windows.Resources;
using System.Collections;
using System.Windows.Controls;
using System.Data;
using System.ComponentModel;
using CMD.BAL.CAT;
using CMD.BAL.MISC;
using System.Text.RegularExpressions;
using System.Reflection;
using CMD_DKT.BAL;
using CMD_DKT.Utilities;

namespace CMD_DKT.Sol
{
    class UIArchivos 
    {
        //UINuevaSolicitud UINSolicitud;
        //public UIArchivos( UINuevaSolicitud UISolicitud)
        //{
        //     UINSolicitud = UISolicitud;
        //}
        public void CargaNuevoDoc(string tipoSolicitante, string tipoPersona, int CheckMismoDomicilio, ref string primerArchivo, ref StackPanel spArchivos)
        {
           
            try
            {
                StackPanel spN;

                TextBlock nTxtB;
                TextBlock unidDoc;
                TextBlock unidRuleDoc;
                TextBlock tbUSD;
                TextBlock tbDocus;
                TextBlock path;
                TextBlock numGene;

                Image estatus;
                DataTable dt = CargarArchivos.GetArchivos(1, tipoSolicitante, CheckMismoDomicilio, tipoPersona);
                
                if (dt != null)
                {
                    int indice = 0;

                    foreach (DataRow dr in dt.Rows)
                    {
                        spN = new StackPanel();
                        spN.Orientation = Orientation.Horizontal;
                        nTxtB = new TextBlock();

                        unidDoc = new TextBlock();
                        unidRuleDoc = new TextBlock();

                        tbUSD = new TextBlock();
                        tbUSD.Name = "USD";

                        tbDocus = new TextBlock();
                        tbDocus.Name = "DOCUS";

                        path = new TextBlock();
                        path.Text = null;
                        path.Visibility = Visibility.Hidden;

                        nTxtB.Text = dt.Rows[indice]["DOCUMENTO"].ToString();

                        unidDoc.Text = dt.Rows[indice]["UNID_CNF_DOCUMENTO"].ToString();
                        unidDoc.Name = "unidDoc";
                        unidDoc.Visibility = Visibility.Hidden;

                        unidRuleDoc.Text = dt.Rows[indice]["UNID_CNF_RULEDOC"].ToString();
                        unidRuleDoc.Name = "unidRuleDoc";
                        unidRuleDoc.Visibility = Visibility.Hidden;

                        spN.Children.Add(nTxtB);

                        estatus = new Image();
                        estatus = iconoNoCargado();

                        spN.Children.Add(estatus);
                        spN.Children.Add(path);
                        spN.Children.Add(unidDoc);
                        spN.Children.Add(unidRuleDoc);
                        spN.Children.Add(tbUSD);
                        spN.Children.Add(tbDocus);

                        numGene = new TextBlock();
                        numGene.Visibility = Visibility.Hidden;
                        numGene.Name = "numGene";
                        spN.Children.Add(numGene);

                        eventoClickImagen(estatus, spN, unidDoc, unidRuleDoc, tbUSD, tbDocus, path, numGene, primerArchivo);
                        eventoClickTextBlock(nTxtB, path);
                        //ft = 1;

                        //Llena la Regla actual 
                        //UINSolicitud.Regladoc = dt.Rows[indice]["UNID_CNF_RULEDOC"].ToString();

                        indice += 1;
                        spArchivos.Children.Add(spN);
                    }//---Pintar la lista de archivos
                }
                else
                {
                    //Despliega no hay archivos por estar vacío                   
                    spN = new StackPanel();
                    nTxtB = new TextBlock();
                    nTxtB.Text = "No hay archivos";
                    spN.Children.Add(nTxtB);
                    spArchivos.Children.Add(spN);
                }

            }//endtry
            catch (Exception ex)
            {
                MessageBox.Show("No se pudo mostrar  " + ex.ToString(), "Error");
            }
            finally
            {

            }

        }
        public void existenArchivos(string cperso, string ctiposol, int check, int tipoSolicitud, string tipoSolicitante, string tipoPersona, ref string primerArchivo, ref StackPanel spArchivos)
        {
            StackPanel stackhijo;
            TextBlock tbkhijo;
            StackPanel spN;

            int exist = 0;
            DataTable dt = CargarArchivos.GetArchivos(tipoSolicitud, tipoSolicitante, check, tipoPersona);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                foreach (var childstack in spArchivos.Children)
                {
                    if (childstack.GetType() == typeof(System.Windows.Controls.StackPanel))
                    {
                        stackhijo = (StackPanel)childstack;
                        foreach (var tbkchild in stackhijo.Children)
                        {
                            if (tbkchild.GetType() == typeof(System.Windows.Controls.TextBlock))
                            {
                                tbkhijo = (TextBlock)tbkchild;

                                //if (tbkhijo.Name == "unidDoc")

                                //{

                                if (dt.Rows[i]["UNID_CNF_DOCUMENTO"].ToString() == tbkhijo.Text)
                                //if (dt.Rows[i]["UNID_CNF_DOCUMENTO"].ToString() == unidDoc.Text)
                                {
                                    exist = 1;
                                }
                                else
                                {// exist = 0;

                                    if (exist == 0)//si no existe en los archivos ya desplegados
                                    {     //-----------------------

                                        spN = new StackPanel();
                                        spN.Orientation = Orientation.Horizontal;

                                        TextBlock nTxtB = new TextBlock();
                                        TextBlock unidDoc = new TextBlock();
                                        TextBlock unidRuleDoc = new TextBlock();
                                        TextBlock tbUSD = new TextBlock();
                                        tbUSD.Name = "USD";
                                        tbUSD.Visibility = Visibility.Hidden;
                                        TextBlock tbDocus = new TextBlock();
                                        tbDocus.Name = "DOCUS";
                                        tbDocus.Visibility = Visibility.Hidden;
                                        TextBlock path = new TextBlock();
                                        path.Text = null;
                                        path.Visibility = Visibility.Hidden;
                                        nTxtB.Text = dt.Rows[i]["DOCUMENTO"].ToString();
                                        unidDoc.Text = dt.Rows[i]["UNID_CNF_DOCUMENTO"].ToString();
                                        unidDoc.Name = "unidDoc";
                                        unidDoc.Visibility = Visibility.Hidden;
                                        unidRuleDoc.Text = dt.Rows[i]["UNID_CNF_RULEDOC"].ToString();
                                        unidRuleDoc.Name = "unidRuleDoc";
                                        unidRuleDoc.Visibility = Visibility.Hidden;
                                        spN.Children.Add(nTxtB);
                                        Image estatus = new Image();
                                        estatus = iconoNoCargado();

                                        TextBlock numGene = new TextBlock();
                                        numGene.Visibility = Visibility.Hidden;
                                        numGene.Name = "numGene";

                                        spN.Children.Add(nTxtB);
                                        spN.Children.Add(estatus);
                                        spN.Children.Add(path);
                                        spN.Children.Add(unidDoc);
                                        spN.Children.Add(unidRuleDoc);
                                        spN.Children.Add(tbUSD);
                                        spN.Children.Add(tbDocus);
                                        spN.Children.Add(numGene);
                                        spArchivos.Children.Add(spN);

                                        //Llena la regla actual

                                        //Regladoc = dt.Rows[i]["UNID_CNF_RULEDOC"].ToString();

                                        eventoClickImagen(estatus, spN, unidDoc, unidRuleDoc, tbUSD, tbDocus, path, numGene, primerArchivo);

                                        eventoClickTextBlock(nTxtB, path);

                                    }

                                }

                                //}//final de If "uniDOc"
                            }//final si es textbloc

                        }//final foreach hijos de estak hijo

                    }//final si es del tipo stackpanel
                }//final foreach en spArchivos




            }// final for
        }

        private void eventoClickTextBlock(TextBlock nTxtB, TextBlock path)
        {
            #region abrir archivo al dar click en el textblock
            nTxtB.MouseUp += delegate(object sender3, MouseButtonEventArgs e3)
            {
                if (path.Text == null || path.Text == "")
                {
                    MessageBox.Show("Aun no cargado algún archivo", "Abrir Archivo", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }

                else
                {
                    System.Diagnostics.Process.Start(path.Text, "");

                }

            };//Fin del clic en el textblock del archivo
            #endregion
        }

        public Image iconoNoCargado()
        {
            Image iconoStat = new Image();
            BitmapImage bi2 = new BitmapImage();
            bi2.BeginInit();
            bi2.UriSource = new Uri("Images/icon_cancelar_001.png", UriKind.Relative);
            bi2.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
            bi2.EndInit();
            iconoStat.Stretch = Stretch.Fill;
            iconoStat.Source = bi2;
            iconoStat.Name = "nocargado";
            return iconoStat;
        }

        private void eventoClickImagen(Image estatus,StackPanel spN,TextBlock unidDoc, TextBlock unidRuleDoc, TextBlock tbUSD, TextBlock tbDocus, TextBlock path,TextBlock numGene ,string primerArchivo)
        {
            estatus.MouseUp += delegate(object sender3, MouseButtonEventArgs e3)
            {
                #region si no cargado

                Image estatus2 = (Image)sender3;

                if (estatus.Name == "nocargado")
                {

                    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
                    dlg.Title = "Carga Documento";
                    dlg.Multiselect = false;
                    dlg.DefaultExt = "*.txt";
                    Nullable<bool> result = dlg.ShowDialog();
                    #region Sí en el dialog
                    if (result == true)
                    {

                        string fileName = dlg.SafeFileName;
                        string sourcePath = System.IO.Path.GetDirectoryName(dlg.FileName);

                        string targetPath = @"C:\Users\Victor\Documents\Visual Studio 2010\Projects\CMD\Files";
                        //string targetPath = @"C:\Users\Samuel\Documents\CMD_DKT\CMD_DKT\Archivos";

                        string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
                        string destFile = System.IO.Path.Combine(targetPath, fileName);
                        string extension;
                        string tamanio;

                        //Insertar archivos
                        DataTable dtb = SaveFiles.InsertArchivos(primerArchivo, unidRuleDoc.Text, unidDoc.Text, fileName);

                        tbUSD.Text = dtb.Rows[0][1].ToString();
                        tbDocus.Text = dtb.Rows[0][0].ToString();

                        //Solicitud = dtb.Rows[0][0].ToString();

                        numGene.Text = dtb.Rows[0][4].ToString();
                        fileName = dtb.Rows[0][4].ToString();
                        destFile = System.IO.Path.Combine(targetPath, fileName);

                        System.IO.File.Copy(sourceFile, destFile, true);
                        extension = System.IO.Path.GetExtension(destFile);

                        FileInfo file = new FileInfo(destFile);
                        tamanio = Convert.ToString(file.Length / 1024);
                        //MessageBox.Show("Exte,tama" + extension + " " + tamanio);

                        path.Text = destFile;

                        foreach (var child3 in spN.Children)
                        {
                            if (child3.GetType() == typeof(System.Windows.Controls.Image))
                            {
                                Image imagen = (Image)child3;
                                BitmapImage bi2 = new BitmapImage();
                                bi2.BeginInit();
                                bi2.UriSource = new Uri("Images/icon_validar_001.png", UriKind.Relative);
                                bi2.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                                bi2.EndInit();
                                imagen.Name = "cargado";
                                imagen.Source = bi2;
                            }//--si es imagen
                        }

                        primerArchivo = dtb.Rows[0][0].ToString();



                    }//--final Aceptar del dialog


                    #endregion
                }//--final estatus.name=nocargado
                #endregion


                else //Si ya fue cargado el archivo
                {
                    if (MessageBox.Show("¿Desea eliminar archivos?", "Eliminar", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                    {
                        foreach (var child3 in spN.Children)
                        {
                            if (child3.GetType() == typeof(System.Windows.Controls.Image))
                            {
                                Image imagen = (Image)child3;
                                BitmapImage bi2 = new BitmapImage();
                                bi2.BeginInit();
                                bi2.UriSource = new Uri("Images/icon_cancelar_001.png", UriKind.Relative);
                                bi2.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                                bi2.EndInit();
                                imagen.Name = "nocargado";
                                imagen.Source = bi2;
                            }
                        }

                        path.Text = null;

                        //eliminar archivo de la base de datos
                        SaveFiles.fueraDeRegla(tbDocus.Text, tbUSD.Text);

                    }//--Final del -Sí eliminar hijos

                }//---Final ya fue cargado el archivo--

            };//Fin clic en la imagen status
        }

        private void agregarElementoStack(ref StackPanel spDocs)
        {
        }
       
    }
}
